#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <strings.h>
#include <errno.h> // 全局变量（临界资源），所有库函数都会修改它
#include <sys/stat.h>
#include <sys/types.h>
#include <sys/ioctl.h>
#include <sys/wait.h>
#include <pthread.h> // POSIX thread
#include <semaphore.h> // for sem_post()/sem_wait()

sem_t sem; // 全局匿名信号，所有线程共享

// 线程例程
void * routine(void * arg)
{
    while(1)
    {
        sem_wait(&sem);

        for(int i=0; i<26;i ++)
        {
            fprintf(stderr, "%c", 'a'+i);
            usleep(100*1000);
        }

        sem_post(&sem);
    }
}

int main(int argc, char const *argv[])
{
    pthread_t tid;
    pthread_create(&tid, NULL, routine, NULL);

    sem_init(&sem, 0, 1); // 此处的sem是二值信号量，等价于互斥锁

    int i=0;
    while(1)
    {
        sem_wait(&sem);

        for(int i=0; i<10; i++)
        {
            fprintf(stderr, "%d", i);
            usleep(100*1000);
        }

        sem_post(&sem);
    }

    return 0;
}
